[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
미니프로젝트10 | ✅저자: 이유정(박사)
프로젝트 코드명: RecursiveDataSum
프로젝트 유형: 재귀 기반 중첩 데이터 분석기
🖥️ 프로젝트 개요
중첩 리스트 안에 섞여 있는 숫자(int, float), 문자열(str), 불린(bool)의 개수와,
숫자의 합계, 문자열의 총 길이, 불린 값의 True 개수를 각각 계산하는 재귀 분석기를 만듭니다.
◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용
재귀함수
로 리스트 구조 탐색조기 리턴
및입력값 검사
리스트 평탄화 X
→ 구조 유지하며 정보만 추출isinstance()
활용한 타입 분기
📄 기능 요구사항 (Functional Requirements)
- 숫자 (int, float) 개수 및 합계 출력
- 문자열 개수 및 총 길이 출력
- 불린 타입 중
True
개수 출력 - 리스트 구조가 아니거나 빈 리스트인 경우 예외 처리
📄 비기능 요구사항 (Non-Functional Requirements)
- 함수 분리: 자료 유형별 로직 분리
- 재귀 구조 유지
- 입력값이 리스트가 아닐 경우 에러 메시지 출력
✅ 출력 포맷 구성:
총 숫자 개수: 4
숫자 합계: 35.5
총 문자열 개수: 3
총 문자열 길이: 10
True 개수: 2
✅ 정답 코드:
def analyze(data):
if not isinstance(data, list):
print("리스트 형태의 데이터만 분석할 수 있습니다.")
return
result = {'num_count': 0, 'num_sum': 0, 'str_count': 0, 'str_len': 0, 'true_count': 0}
for item in data:
if isinstance(item, list):
sub = analyze(item)
if sub:
for key in result:
result[key] += sub[key]
elif isinstance(item, (int, float)):
result['num_count'] += 1
result['num_sum'] += item
elif isinstance(item, str):
result['str_count'] += 1
result['str_len'] += len(item)
elif isinstance(item, bool):
result['true_count'] += int(item)
return result
# 테스트 예시
nested = [1, "hello", [3.5, [True, "ok"]], [False, 10, "bye", [7, True]]]
res = analyze(nested)
if res:
print("총 숫자 개수:", res['num_count'])
print("숫자 합계:", res['num_sum'])
print("총 문자열 개수:", res['str_count'])
print("총 문자열 길이:", res['str_len'])
print("True 개수:", res['true_count'])
🔍 코드 해설:
- 다단계 리스트 안의 타입별 데이터를 분류·집계하는 실전 기초
- 재귀적으로 하위 리스트를 탐색하고 결과를 누적
- 실무에서 데이터 통계, 필터링, 로깅 분석 등에 직접 응용 가능